package com.shigu.route;

import com.shigu.passageway.Passageway;
import com.shigu.passageway.bo.RegistBO;
import com.shigu.passageway.exceptions.PassagewayException;
import com.shigu.route.bo.WaySelBO;

/**
 * 通道路由
 */
public interface PassagewayRoute {
    /**
     * 初始化数据库配置
     */
    void init();

    /**
     * 综合路由选择
     * @param param
     * @return
     */
    Passageway selway(WaySelBO param);

    /**
     * 注册所有通道
     * @param bo
     */
    void registAllway(RegistBO bo) throws PassagewayException;

    /**
     * 更新所有通道进件信息
     * @param bo
     */
    void updateAllway(RegistBO bo) throws PassagewayException;

    /**
     * 设置所有通道的费率
     * @param agentId
     * @param businessId
     * @param rate
     */
    void setAllFee(Long agentId,Long businessId,Double rate) throws PassagewayException;

    /**
     * 替代理一级设置费率
     * @param agentId
     * @param rate
     * @throws PassagewayException
     */
    void setAgentFee(Long agentId,Double rate) throws PassagewayException;
    /**
     * 按开户行选择
     * @param bankName 信用卡行名
     * @return 适合他的通道
     */
    Passageway selwayByBank(String bankName);

    /**
     * 按金额筛选
     * @return 适合他的通道
     */
    Passageway selwayByMoney(Double money);

    /**
     * 按代理商选择
     * @return 适合他的通道
     */
    Passageway selwayByAgent(Long agentId);

    /**
     * 按刷卡人路由
     * @return 适合他的通道
     */
    Passageway selwayByBusiness(Long business);

    /**
     * 默认通道
     * @return
     */
    Passageway defaultway();

    /**
     * 按通道ID取通道
     * @param pid
     * @return
     */
    Passageway selwayByPid(Long pid);

    /**
     * 按通道标签取通道
     * @param tagName
     * @return
     */
    Passageway selwayByTagName(String tagName);

}
